package br.com.esporte.view.site.grupo.comunidade.diaPraticado;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.apache.wicket.Component;
import org.apache.wicket.datetime.StyleDateConverter;
import org.apache.wicket.datetime.markup.html.form.DateTextField;
import org.apache.wicket.extensions.yui.calendar.DatePicker;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.PropertyModel;

import br.com.base.exception.NegociosException;
import br.com.esporte.business.impl.converter.DateConverter;
import br.com.esporte.exception.ViewException;
import br.com.esporte.model.DiaPraticadoGrupo;
import br.com.esporte.model.Grupo;
import br.com.esporte.model.HoraEnum;
import br.com.esporte.model.MinutoEnum;
import br.com.esporte.view.infra.generic.IPaginaCadastro;
import br.com.esporte.view.infra.generic.Pagina;
import br.com.esporte.view.site.component.menu.menuTopo.MenuTopo;
import br.com.esporte.view.site.component.menu.menuTopo.MenuTopoComponente;
import br.com.esporte.view.site.grupo.comunidade.PaginaComunidade;

/**
 * 
 * @author Milton Domingues
 *
 */
public class PaginaCriarDiaPraticado extends PaginaComunidade implements IPaginaCadastro {

	private static final String LIST_MENUS_TOPO_ID = "menuTopo";

	private DiaPraticadoGrupo diaPraticado;

	private Date data;
	private HoraEnum horaInicio;
	private MinutoEnum minutoInicio;
	private HoraEnum horaFim;
	private MinutoEnum minutoFim;

	public PaginaCriarDiaPraticado(Grupo grupo) {
		super(grupo);
	}

	@Override
	public void acaoSalvar() {
		diaPraticado.setGrupo(getGrupo());
		diaPraticado.setDataHoraInicio(DateConverter.converterDataHora(getData(), getHoraInicio(), getMinutoInicio()));
		diaPraticado.setDataHoraFim(DateConverter.converterDataHora(getData(), getHoraFim(), getMinutoFim()));
		if(isUpdate()){
			getFachada().alterar(diaPraticado, getUsuarioLogado());
		}else{
			getFachada().inserir(diaPraticado, getUsuarioLogado());
		}
	}

	@Override
	public void carregarView() {
		super.carregarView();
		diaPraticado = new DiaPraticadoGrupo();
		diaPraticado.setGrupo(getGrupo());
		setDefaultModelEntity();
	}

	private Button criarBtSalvar() {
		Button botao = new Button("btSalvar"){
			private static final long serialVersionUID = -3960483125623050680L;
			@Override
			public void onSubmit() {
				try{
					acaoSalvar();
					setResponsePage(new PaginaListarDiaPraticado(getGrupo()));
					addInfo("Grupo cadastrada com sucesso.");
				}catch (NegociosException e) {
					tratarException(e);
				}
			}
		};
		return botao;
	}

	private DateTextField criarData(){
		DateTextField data = new DateTextField("data", new PropertyModel<Date>(this,"data"), new StyleDateConverter("S-", true));
		DatePicker datePicker = new DatePicker();
		datePicker.setShowOnFieldClick(true);
		data.add(datePicker);
		return data;
	}

	private Form<Component> criarForm() {
		Form<Component> form = new Form<Component>("form");
		form.add(criarData());
		criarHoraInicio(form);
		criarHoraFim(form);
		form.add(criarBtSalvar());
		return form;
	}

	private void criarHoraFim(Form<Component> form){

		ChoiceRenderer<HoraEnum> horaChoice = new ChoiceRenderer<HoraEnum>("valor");
		DropDownChoice<HoraEnum> hora = new DropDownChoice<HoraEnum>("horaFim", new PropertyModel<HoraEnum>(this,"horaFim"), Arrays.asList(HoraEnum.values()), horaChoice);

		ChoiceRenderer<MinutoEnum> minutoChoice = new ChoiceRenderer<MinutoEnum>("valor");
		DropDownChoice<MinutoEnum> minuto = new DropDownChoice<MinutoEnum>("minutoFim", new PropertyModel<MinutoEnum>(this, "minutoFim"), Arrays.asList(MinutoEnum.values()), minutoChoice);

		form.add(hora);
		form.add(minuto);
	}

	private void criarHoraInicio(Form<Component> form){

		ChoiceRenderer<HoraEnum> horaChoice = new ChoiceRenderer<HoraEnum>("valor");
		DropDownChoice<HoraEnum> hora = new DropDownChoice<HoraEnum>("horaInicio", new PropertyModel<HoraEnum>(this, "horaInicio"), Arrays.asList(HoraEnum.values()), horaChoice);

		ChoiceRenderer<MinutoEnum> minutoChoice = new ChoiceRenderer<MinutoEnum>("valor");
		DropDownChoice<MinutoEnum> minuto = new DropDownChoice<MinutoEnum>("minutoInicio", new PropertyModel<MinutoEnum>(this, "minutoInicio"), Arrays.asList(MinutoEnum.values()), minutoChoice);

		form.add(hora);
		form.add(minuto);
	}

	private MenuTopoComponente criarMenuTopo(){
		return new MenuTopoComponente(LIST_MENUS_TOPO_ID, getMenusTopo(), getGrupo().getTipo());
	}

	public Date getData() {
		return data;
	}

	public DiaPraticadoGrupo getDiaPraticado() {
		return diaPraticado;
	}

	public HoraEnum getHoraFim() {
		return horaFim;
	}

	public HoraEnum getHoraInicio() {
		return horaInicio;
	}

	private List<MenuTopo> getMenusTopo(){
		List<MenuTopo> list = new ArrayList<MenuTopo>();

		Link<Pagina> event1 = new Link<Pagina>(MenuTopoComponente.LINK_MENU_ID) {

			private static final long serialVersionUID = 6408049973489553594L;

			@Override
			public void onClick() {
				try{
					setResponsePage(new PaginaListarDiaPraticado(getGrupo()));
				}catch (ViewException e) {
					redirectViewException(e);
				}
			}
		};
		list.add(new MenuTopo(event1, "Listar Dias Praticado"));

		return list;
	}

	public MinutoEnum getMinutoFim() {
		return minutoFim;
	}

	public MinutoEnum getMinutoInicio() {
		return minutoInicio;
	}

	@Override
	public boolean isUpdate() {
		return getDiaPraticado().getId() != null;
	}

	@Override
	public void montarPagina() {
		super.montarPagina();
		addContainer(criarMenuTopo());
		addContainer(criarForm());
	}

	public void setData(Date dataPraticado) {
		data = dataPraticado;
	}

	@Override
	public void setDefaultModelEntity() {
		setDefaultModel(new CompoundPropertyModel<DiaPraticadoGrupo>(diaPraticado));
	}

	public void setDiaPraticado(DiaPraticadoGrupo diaPraticado) {
		this.diaPraticado = diaPraticado;
	}

	public void setHoraFim(HoraEnum horaFim) {
		this.horaFim = horaFim;
	}

	public void setHoraInicio(HoraEnum horaInicio) {
		this.horaInicio = horaInicio;
	}

	public void setMinutoFim(MinutoEnum minutoFim) {
		this.minutoFim = minutoFim;
	}

	public void setMinutoInicio(MinutoEnum minutoInicio) {
		this.minutoInicio = minutoInicio;
	}

	@Override
	public boolean viewPublica() {
		return false;
	}

}
